package com.vhall.component.service.exam;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.vhall.component.entity.common.CachePage;
import com.vhall.component.entity.exam.ExamEntity;
import com.vhall.component.entity.exam.dto.ExamAnswersDTO;
import com.vhall.component.entity.exam.vo.ExamAnswerListVo;
import com.vhall.component.entity.room.RoomExamLkEntity;


/**
 * 考试缓存服务
 *
 * @author yuanzh
 * @date 2021/9/29
 */
public interface ExamCacheService {

    /**
     * 缓存直播间考试回答列表
     *
     * @param vo    查询参数
     * @param exams 缓存对象
     * @return 缓存对象
     */
    CachePage<ExamAnswersDTO> cacheAnsweredList(ExamAnswerListVo vo, IPage<ExamAnswersDTO> exams);

    /**
     * 获取考试回答列表缓存hash key
     *
     * @param vo 查询参数
     * @return hash key
     */
    String getAnsweredListCacheHashKey(ExamAnswerListVo vo);

    /**
     * 获取缓存的直播间考试回答列表
     *
     * @param vo 查询参数
     * @return 缓存对象
     */
    CachePage<ExamAnswersDTO> getCachedAnsweredList(ExamAnswerListVo vo);

    /**
     * 缓存房间内考试结束状态
     *
     * @param roomId   房间id
     * @param examId   考试id
     * @param isFinish 是否结束，true=结束 false=未结束
     */
    void cacheExamFinishStatus(String roomId, Integer examId, boolean isFinish);

    /**
     * 获取房间内考试结束状态（缓存+DB模式）
     *
     * @param roomId 房间id
     * @param examId 考试id
     * @return 结束状态，true=结束 false=未结束
     */
    boolean getExamFinishStatus(String roomId, Integer examId);

    /**
     * 获取考试信息
     *
     * @param examId 考试id
     * @return 考试信息
     */
    ExamEntity getExam(Integer examId);

    /**
     * 获取房间内考试信息（缓存+DB模式）
     *
     * @param roomId 房间id
     * @param examId 考试id
     * @return 考试信息
     */
    RoomExamLkEntity getRoomExamLk(String roomId, Integer examId);

}
